# 字典
# 作用：按键值对存储数据

# 定义
# {}内必须使用逗号分隔开 key: value,key必须为不可变类型且不能重复，value可以为任意类型
d = {'a': 1, 2: [3, 5]}

# 类型转换
l = [['name', 'jack'], ('age', 18)]
print(dict(l))  # {'name': 'jack', 'age': 18}

# fromkeys
key = ['a', 'b', 'c']
d1 = {}.fromkeys(key, None)
print(d1)  # {'a': None, 'b': None, 'c': None}

# 常见方法
# 按key取值
d2 = {'a': 1, 'b': 2, 'c': 3}
print(d2['a'])  # 1
# 按key修改值
d2['a'] = 5
print(d2['a'])  # 5
d2['k'] = 11  # 如果key不存在，则添加新值
print(d2)  # {'a': 5, 'b': 2, 'c': 3, 'k': 11}

# 删除
d3 = {'a': 1, 'b': 2, 'c': 3, 'd': 4}
# pop 根据key删除元素 返回删除的value值
res = d3.pop('a')
print(res)  # 1
print(d3)  # {'b': 2, 'c': 3, 'd': 4}

# popitem() 删除最后一对键值对
res = d3.popitem()
print(res)  # ('d', 4)
print(d3)  # {'b': 2, 'c': 3}

# 取值
# keys() 返回所有key值的列表的迭代器
d4 = {'a': 1, 'b': 2, 'c': 3}
print(d4.keys())  # dict_keys(['a', 'b', 'c'])
# values() 返回所有value值的列表的迭代器
print(d4.values())  # dict_values([1, 2, 3])
# items() 返回所有键值对元组的列表的迭代器
print(d4.items())

# clear 清空列表
d5 = {'a': 1, 'b': 2, 'c': 3}
d5.clear()
print(d5)  # {}

# get 按key取值,找不到返回None
d6 = {'a': 1, 'b': 2, 'c': 3}
print(d6.get('a'))  # 1
print(d6.get('e'))  # None

# update 用新字典中的值更新到当前字典
d7 = {'a': 1, 'b': 2}
d8 = {'b': 3, 'c': 4, 'd': 5}
d7.update(d8)
print(d7)  # {'a': 1, 'b': 3, 'c': 4, 'd': 5}

# setdefault() 如果key存在，则不添加,如果key不存在，则添加,返回字典中key对应的值
d8 = {'a': 1, 'b': 2, 'c': 3}
# 如果key存在，则不添加
d8.setdefault('a', 3)
print(d8)  # {'a': 1, 'b': 2, 'c': 3}
# 如果key不存在，则添加
d8.setdefault('d', 3)
print(d8)  # {'a': 1, 'b': 2, 'c': 3, 'd': 3}
